A software container can automate and simplify a deployment of a software application in a virtualized operating environment, such as a cloud-computing platform or in a large enterprise network. A container may comprise a standalone computing environment in which is installed one or more configured computer applications, infrastructure, and associated software. Such a container functions as a “black box” software object that, when deployed, presents a virtualized turnkey computing environment that does not require the complex installation procedures required to provision and configure virtual infrastructure on a conventional cloud-computing or virtualized enterprise platform.
Deploying preconfigured containers may, however, not provide the flexibility needed to easily install instances of an application across an entire enterprise. When deployed across multiple platforms providers, for example, a container's predefined configuration settings cannot be varied to most efficiently accommodate each platform provider's computing environment. Some, but not all platform providers may, for example, provide built-in security services, a firewall, or other features that duplicate functionality comprised by a container. Conversely, in other cases, some platform providers may lack important features that a container expects to be available.
In yet other scenarios, a deployed application comprised by a container may require different sets of component software, configuration settings, or resources, depending on the application's lifecycle phase. Different containers might, for example, be required to deploy the application while the application was in a development, a test, or a production phase. In some cases, an application that is deployed for development purposes may require a container that includes design and development tools. If deployed for test purposes, that same application might instead require debugging software or test datasets. A container used to deploy the application in a production environment may require a set of production-oriented security policies or configuration settings. Container technology as it currently known in the art thus cannot effectively deploy the same application in all cases.
In such circumstances a developer may be forced to create and deploy multiple types of containers for a single application; to create a least-common-denominator compromise container that cannot optimize performance, resource-consumption, or functionality on every provider's platform; or to manually fine-time every container instance after it has been deployed.
Such customization may require tasks like installing and configuring additional software on top of a deployed application, thus greatly reducing the convenience and benefit of a mechanism that would otherwise automate the installation, configuration, and maintenance of complex software in a virtualized environment.
Most types of computer software support conditional instructions that let a computer program decide whether to perform conditional operations at run time. Software used to create and deploy containers, however, for reasons cited below, generally provides only rigidly defined tools and data structures that, by their nature, cannot support conditional deployment.
There is therefore a need for a way to add conditional deployment functionality to a container such that a single container may be used to deploy customized instances of an application as a function of conditions that become known at the time a container is deployed.